home *** CD-ROM | disk | FTP | other *** search
- {
- >>
- >> DELPHI EQUIVALENT TO VB SHELL COMMAND
- >>
- [Trimmed]
- >
- >> 3: Will I have a method of monitoring the DOS program/shell to I
- >> know when it has terminated?
- >>
- >
-
- You have to dig about a bit in the API to do this, but the answer is
- basically to keep enumerating the task list until the task that you
- started is no longer present. Do something like this to get the
- Hinstance of your new task (The API call used to enumerate the task list
- needs a Hinstance):
- }
- {Execute batch file}
- StrPCopy(Templine, 'temp.bat');
- TaskHandle := ShellExecute(frmMain.Handle, NIL, 'command.com',
- templine,
- Tempdir,
- SW_MINIMIZE);
-
- and monitor it with a function like this:
-
- <------------------------------------------------->
-
- function CheckTask(hInstance: WORD): Boolean;
- var
- TaskInfo: TTASKENTRY;
- RetVal: Boolean;
- begin
- TaskInfo.dwSize := SizeOf(TTASKENTRY);
- RetVal := FALSE;
- if(TaskFirst(@TaskInfo)) then
- begin
- repeat
- if(TaskInfo.hInst = hInstance) then
- begin
- RetVal := TRUE;
- Break;
- end;
- until (TaskNext(@TaskInfo) = FALSE);
- end;
- CheckTask := RetVal;
- end;
- <-------------------------------------------------->
-
- This runs down the task list, trying to find the task with the specified
- Hinstance, returning true if it is still there. To use this function,
- simply call it in a loop like this
-
- while CheckTask(TaskHandle) do
- begin
- Application.ProcessMessages;
- end;
-
- Hope this helps.
-
- ---------------------------------------------------------------------
- Marc Evans marc@leviathn.demon.co.uk